const sqlite3 = require('sqlite3').verbose() //引入sqlite3
const { resolve } = require('path')
const path = require('path') //获取地址，引入数据库
// const { param } = require("../routers/TestRouter")
const Genid = require('../utils/SnowFlake') //引入雪花id

//  db是暴露出去，给用户作为工具使用的
var db = new sqlite3.Database(path.join(__dirname, 'blog.sqlite3'))
//地址转换成字符串
//WorkerId是一个机器码，这样服务器的id就不会重复
const genid = new Genid({ WorkerId: 1 }) //现在只有一个所以id先设置为1
db.async = {} //定义一个异步的

// 进行sql,和parms还有回调函数的一个封装
db.async.all = (sql, params) => {
  return new Promise((resolve, reject) => {
    db.all(sql, params, (err, rows) => {
      resolve({ err, rows })
      // resolve()异步回调将promise变为fulfilled(已成功)状态
      // reject()异步回调将promise变为rejected(已失败)状态
      // 异步的写法，防止回调地狱
      // Promise的构造函数接收回调函数作为参数
    })
  })
}

// 新增和修改在run里面执行
db.async.run = (sql, params) => {
  return new Promise((resolve, reject) => {
    db.run(sql, params, (err, rows) => {
      resolve({ err, rows })
    })
  })
}
module.exports = { db, genid } //把数据库和雪花id先导出去，就不会别的页面总是要引入了
